/**
 * 主启动模块
 */

// 全局配置参数
// TODO 放在这里, 对于其他的模块来说, 读不到如果要拿不方便
const GLOBAL_PARAMS = {
    // 指定当前环境，'dev' 表示开发环境，'pro' 表示生产环境
    env: 'dev',
    // 指定资源的请求地址
    configUrl: './scripts/config/config.js',
    // 版本号
    version: '1.0',
    // 日志悬浮窗开关
    useLogWindow: false,
    // 服务器中源代码根目录
    configServer: 'www.76.dongcidaci.online/MH/'
}

let modules = {}
let utils = {}
const configStorage = storages.create('config')
const applicationStartModuleStorage = storages.create('applicationStartModule')
const dailyTaskModuleStorage = storages.create('dailyTaskModuleStorage')
const levelingModuleStorage = storages.create('levelingModuleStorage')
const mailPullModuleStorage = storages.create('mailPullModuleStorage')

init()

function init() {
    if (GLOBAL_PARAMS.useLogWindow) { console.show() }
    console.log(files.cwd())
    // 初始化权限
    initializePermissions()
    loadConfig()
}

/**
 * 初始化权限
 */
function initializePermissions() {
    auto()
    if (!requestScreenCapture(false)) {
        console.error('---无截图权限')
    }
}

/**
 * 获取应用的配置信息
 */
function loadConfig() {
    const configModule = require(GLOBAL_PARAMS.configUrl)
    modules = configModule[GLOBAL_PARAMS.env]['moduleList']
    utils = configModule[GLOBAL_PARAMS.env]['utilList']
    createApplicationStartState()
    createDailyTaskModuleStorage()
    createLevelingModuleStorage()
    createMailModuleStorage()
    if (GLOBAL_PARAMS.env == 'dev') {
        // 获取本地工具类js文件，并写入storage中
        for (let utilkey in utils) {
            configStorage.put(utilkey, readJsFile(utils[utilkey]))
            console.log('写入' + utilkey + '\n' + configStorage.get(utilkey))
        }
        // 运行本地的所有模块，并且本地类不进行工具类的更新下载
        for (let moduleskey in modules) {
            if (
                [
                    // 'applicationStartModule',
                    // 'levelingModule',
                    'battleModule',
                    'mainMapProcessingModule',
                    // 'mailPullModule',
                    // 'dailyTaskModule',
                    'plotModule'
                ].includes(moduleskey)) {
                startMoudle(moduleskey, readJsFile(modules[moduleskey]))
                sleep(500)
            }
        }
    } else {
        // 获取服务器工具类js文件，并写入storage中
        for (let utilkey in utils) {
            configStorage.put(utilkey, http.get(GLOBAL_PARAMS.configServer + utils[utilkey]).body.string())
            console.log('写入' + utilkey + '\n' + configStorage.get(utilkey))
        }
        // 运行服务器的所有模块
        for (let moduleskey in modules) {
            if (moduleskey === 'battleModule') {
                startMoudle(moduleskey, http.get(GLOBAL_PARAMS.configServer + modules[moduleskey]).body.string())
            }
        }
    }
}

/**
 * 启动各个模块
 */
function startMoudle(scriptkey, script) {
    engines.execScript(scriptkey, script, {
        loopTimes: 9999,
        interval: 666
    })
}

/**
 * 
 * 读取本地js文件
 */
function readJsFile(path) {
    let returndata
    try {
        returndata = files.read(path)
    } catch (error) {
        console.error(JSON.stringify(error))
    }
    return returndata
}

/**
 * 
 * 写入本地js文件
 */
function writeJsFile(path, data) {
    let returndata = false
    try {
        files.write(path, data)
        returndata = true
    } catch (error) {
        console.error(JSON.stringify(error))
    }
    return true
}

/**
 * 创建启动模块状态
 */
function createApplicationStartState() {
    applicationStartModuleStorage.put('states', [1])
}

function createDailyTaskModuleStorage() {
    dailyTaskModuleStorage.put('complete', false)
    dailyTaskModuleStorage.put('task1', false)
    dailyTaskModuleStorage.put('task2', false)
    dailyTaskModuleStorage.put('task3', false)
    dailyTaskModuleStorage.put('task4', false)
    dailyTaskModuleStorage.put('task5', false)
}

function createMailModuleStorage() {
    mailPullModuleStorage.put('complete', false)
}

function createLevelingModuleStorage() {
    // 日常练级每次上线只执行一次
    levelingModuleStorage.put('complete', false)
}
